package io.github.hadyang.leetcode.tencent;

import java.util.Arrays;
import org.junit.Test;

/**
 * 两数之和 给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。
 *
 * <p>你可以假设每种输入只会对应一个答案。但是，你不能重复利用这个数组中同样的元素。
 *
 * <p>示例:
 *
 * <p>给定 nums = [2, 7, 11, 15], target = 9
 *
 * <p>因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
 */
public class Array894 {

  @Test
  public void test() {
    System.out.println(Arrays.toString(twoSum(new int[] {11, 7, 2, 15}, 9)));
    System.out.println(Arrays.toString(twoSum(new int[] {3, 3}, 6)));
  }

  public int[] twoSum(int[] nums, int target) {
    int i = 0, j = nums.length - 1;

    int[] copy = Arrays.copyOf(nums, nums.length);
    Arrays.sort(nums);

    while (i <= j) {
      int t = nums[i] + nums[j];
      if (t > target) {
        j--;
      } else if (t < target) {
        i++;
      } else {
        int ri = -1, rj = -1;
        for (int k = 0; k < copy.length; k++) {
          if (copy[k] == nums[i] && ri == -1) {
            ri = k;
            continue;
          }

          if (copy[k] == nums[j] && rj == -1) {
            rj = k;
          }
        }

        return new int[] {ri, rj};
      }
    }

    return null;
  }
}
